package com.atguigu.jxc.dao;

import com.atguigu.jxc.entity.SaleList;
import com.atguigu.jxc.entity.vo.CountByDayVo;
import com.atguigu.jxc.entity.vo.CountByMonthVO;
import com.atguigu.jxc.entity.vo.SaleCountVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author 杨林
 * @create 2023-01-29 23:24 星期日
 * description:
 */
public interface SaleListDao {

    /**
     * 保存saleList到数据库
     * @param saleList
     */
    void save(SaleList saleList);

    /**
     * 销售单查询（可查询条件：销售单号、客户、付款状态）
     * @param saleNumber
     * @param customerId
     * @param state
     * @param sTime
     * @param eTime
     * @return
     */
    List<SaleList> list(@Param("saleNumber") String saleNumber,
                        @Param("customerId") Integer customerId,
                        @Param("state") Integer state,
                        @Param("sTime") String sTime,
                        @Param("eTime") String eTime);


    /**
     * 删除销售单
     * @param saleListId
     */
    void delete(@Param("saleListId") Integer saleListId);

    /**
     * 支付结算（修改销售单付款状态）
     * @param saleListId
     */
    void updateState(@Param("saleListId") Integer saleListId);


    /**
     * 销售统计（可根据 商品类别、商品编码或名称 条件查询）
     * @param sTime
     * @param eTime
     * @param goodsTypeId
     * @param codeOrName
     * @return
     */
    List<SaleCountVo> count(@Param("sTime") String sTime,
                            @Param("eTime") String eTime,
                            @Param("goodsTypeId") Integer goodsTypeId,
                            @Param("codeOrName") String codeOrName);


    /**
     * 按日统计接口
     * @param sTime
     * @param eTime
     * @return
     */
    List<CountByDayVo> getSaleDataByDay(@Param("sTime") String sTime,
                                        @Param("eTime") String eTime);


    /**
     * 按月统计
     * @param sTime
     * @param eTime
     * @return
     */
    List<CountByMonthVO> getSaleDataByMonth(@Param("sTime") String sTime,
                                            @Param("eTime") String eTime);
}
